package io.github.maojian.simulation;

import org.junit.Test;

/**
 * 640. 求解方程
 * 求解一个给定的方程，将x以字符串 "x=#value"的形式返回。该方程仅包含 '+' ， '-' 操作，变量x和其对应系数。
 *
 * 如果方程没有解，请返回"No solution"。如果方程有无限解，则返回 “Infinite solutions” 。
 *
 * 题目保证，如果方程中只有一个解，则 'x' 的值是一个整数。
 *
 * 输入: equation = "x+5-3+x=6+x-2"
 * 输出: "x=2"
 *
 * 输入: equation = "x=x"
 * 输出: "Infinite solutions"
 *
 * 输入: equation = "2x=x"
 * 输出: "x=0"
 */
public class Q640 {
    public String solveEquation(String equation) {
        int length = equation.length();
        // 循环指针
        int index = 0;
        // 常数
        int constant = 0;
        // x系数
        int coefficient = 0;
        // 当前系数或常数运算的正负
        int sign = 1;
        while (index < length) {
            // =号左边的计算为正，右边的表达式计算为负
            if (equation.charAt(index) == '=') {
                sign = -1;
                index++;
            }
            int curSign = sign;
            if (equation.charAt(index) == '-' || equation.charAt(index) == '+') {
                curSign = equation.charAt(index) == '-' ? -sign : sign;
                index++;
            }
            int curNum = 0;
            //处理x系数为1简写的情况
            boolean valid = false;
            while (index < length && Character.isDigit(equation.charAt(index))) {
                curNum = curNum * 10 + (equation.charAt(index) - '0');
                index++;
                valid = true;
            }
            if (index < length && equation.charAt(index) == 'x') {
                coefficient += valid ? curSign * curNum : curSign;
                index++;
            } else {
                constant += curSign * curNum;
            }
        }
        if (coefficient == 0) {
            return constant == 0 ? "Infinite solutions" : "No solution";
        }
        return "x=" + (-constant / coefficient);
    }

    @Test
    public void test() {
        String s = "x+5-3+x=6+x-2";
        System.out.println(solveEquation(s));
    }
}
